wayland: Do not store the grab cursor separately
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 19 Jun 2015 12:02:42 +0000 (14:02 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 24 Nov 2015 19:52:12 +0000 (20:52 +0100)
After the grab is finished, we would expect an enter event, and
GDK updating internally the cursor for that window and device.
This means there is no need at all to store it separately in the
backend.

As a side effect, animated cursors are now also possible on grab
icons.

https://bugzilla.gnome.org/show_bug.cgi?id=735847

gdk/wayland/gdkdevice-wayland.c

index 2f86ee13c16404362ec6bd61d3ff8f3aa1ef0489..fb452c9db43105de6a6b89d0e77de91797f35353 100644 (file)
@@ -96,7 +96,6 @@ struct _GdkWaylandDeviceData
   guint32 repeat_count;
   GSettings *keyboard_settings;
 
-  GdkCursor *grab_cursor;
   guint cursor_timeout_id;
   guint cursor_image_index;
   guint cursor_image_delay;
@@ -206,12 +205,7 @@ gdk_wayland_device_update_window_cursor (GdkWaylandDeviceData *wd)
   guint next_image_index, next_image_delay;
   gboolean retval = G_SOURCE_REMOVE;
 
-  if (wd->grab_cursor)
-    {
-      buffer = _gdk_wayland_cursor_get_buffer (wd->grab_cursor, 0,
-                                               &x, &y, &w, &h, &scale);
-    }
-  else if (wd->cursor)
+  if (wd->cursor)
     {
       buffer = _gdk_wayland_cursor_get_buffer (wd->cursor, wd->cursor_image_index,
                                                &x, &y, &w, &h, &scale);
@@ -248,13 +242,6 @@ gdk_wayland_device_update_window_cursor (GdkWaylandDeviceData *wd)
       wl_surface_commit (wd->pointer_surface);
     }
 
-  if (wd->grab_cursor)
-    {
-      /* We admit only static icons during drags so far */
-      gdk_wayland_device_stop_window_cursor_animation (wd);
-      return retval;
-    }
-
   next_image_index =
     _gdk_wayland_cursor_get_next_image_index (wd->cursor,
                                               wd->cursor_image_index,
@@ -545,10 +532,10 @@ gdk_wayland_device_grab (GdkDevice    *device,
                                               wayland_device->wl_seat,
                                               time_);
 
-      g_clear_object (&wayland_device->grab_cursor);
+      g_clear_object (&wayland_device->cursor);
 
       if (cursor)
-        wayland_device->grab_cursor = g_object_ref (cursor);
+        wayland_device->cursor = g_object_ref (cursor);
 
       gdk_wayland_device_update_window_cursor (wayland_device);
     }
@@ -587,7 +574,6 @@ gdk_wayland_device_ungrab (GdkDevice *device,
   else
     {
       /* Device is a pointer */
-      g_clear_object (&wayland_device->grab_cursor);
       gdk_wayland_device_update_window_cursor (wayland_device);
 
       if (wayland_device->pointer_grab_window)
@@ -2276,8 +2262,6 @@ pointer_surface_update_scale (GdkWaylandDeviceData *device)
 
   device->current_output_scale = scale;
 
-  if (device->grab_cursor)
-    _gdk_wayland_cursor_set_scale (device->grab_cursor, scale);
   if (device->cursor)
     _gdk_wayland_cursor_set_scale (device->cursor, scale);